
import time
import logging
from logging import handlers
#
# logging.basicConfig(format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
#                     level=logging.DEBUG)

logger = logging.getLogger('控制台')
logger2 = logging.getLogger('文件')

formatter = logging.Formatter('%(asctime)s,%(filename)s[line:%(lineno)d]-%(levelname)s:%(message)s')
logger.setLevel(logging.DEBUG)
logger2.setLevel(logging.DEBUG)

# file_handler = logging.FileHandler('test2.log',encoding='utf-8',mode='w+')
# file_handler.setLevel(logging.INFO)
# file_handler.setFormatter(formatter)
#控制台输出
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(formatter)
info_file_name = 'info-' + time.strftime('%Y-%m-%d', time.localtime(time.time())) + '.log'


#日期输出
time_rotating_file_handler = handlers.TimedRotatingFileHandler(filename=info_file_name,
                                                                when='MIDNIGHT',
                                                                interval=1,
                                                                backupCount=7,
                                                                encoding='utf-8')
# time_rotating_file_handler.setLevel(logging.DEBUG)
# time_rotating_file_handler.setFormatter(formatter)
#
# logger.addHandler(time_rotating_file_handler)
logger.addHandler(stream_handler)
logger2.addHandler(time_rotating_file_handler)
'''
logging.StreamHandler -> 控制台输出
logging.FileHandler -> 文件输出
logging.handlers.RotatingFileHandler -> 按照大小自动分割日志文件，一旦达到指定的大小重新生成文件
logging.handlers.TimedRotatingFileHandler -> 按照时间自动分割日志文件

我们发现Formatter是给handler设置的，这很好理解，因为handler是负责把日志输出到哪里，所以是给它设置格式，而不是给logger；那为什么level需要设置两次呢？给logger设置是告诉它要记录哪些级别的日志，给handler设是告诉它要输出哪些级别的日志，相当于进行了两次过滤。这样的好处在于，当我们有多个日志去向时，比如既保存到文件，又输出到控制台，就可以分别给他们设置不同的级别；logger 的级别是先过滤的，所以被 logger 过滤的日志 handler 也是无法记录的，这样就可以只改 logger 的级别而影响所有输出。两者结合可以更方便地管理日志记录的级别。

'''




logger.debug('debug级别，一般用来打印一些调试信息，级别最低')
logger.info('info级别，一般用来打印一些正常的操作信息')
logger.warning('waring级别，一般用来打印警告信息')
logger.error('error级别，一般用来打印一些错误信息')
logger.critical('critical级别，一般用来打印一些致命的错误信息，等级最高')

logger2.debug('文件   debug级别，一般用来打印一些调试信息，级别最低')
logger2.info('文件   info级别，一般用来打印一些正常的操作信息')
logger2.warning('文件   waring级别，一般用来打印警告信息')
logger2.error('文件   error级别，一般用来打印一些错误信息')
logger2.critical('文件   critical级别，一般用来打印一些致命的错误信息，等级最高')

